package com.cium.aqie.highOrderFunction

import java.io.BufferedReader
import java.io.FileReader

/**
 * @Function: data 类,解决字段为空
 * @Author: aqie
 * @Date: 2019/9/2 9:52
 */
data class Person(val name: String, val age: Int){
    fun work(){
        println("$name is working!!!")
    }
}

fun main() {
    // 如果person不为空 则打印, 可以用() 代替person, 实际调用的Component
    findPerson()?.let {(name,age)->
        println("$name - $age")
    }
    findPerson()?.let {person ->
        person.work()
    }
    // 高阶函数
    findPerson()?.apply {
        work()
        println(age)
    }
    // with 不能为空
    with(findPersonReal()){
        work()
    }
    // readFromFile()
    // readFromFileWith()
    easyRead()
}

// 可能为空
fun findPerson(): Person?{
    return Person("aqie", 18)
}

fun findPersonReal():Person{
    return Person("cium", 24)
}

// 读取文件
fun readFromFile(){
    /**
     * use 必须传入 Closeable
     */
    BufferedReader(FileReader("text.txt")).use {
        var line: String?
        while (true){
            // 调用的 bufferReader 的 readline
            line = it.readLine()?: break
            println(line)
        }
    }
}

/**
 * 作用域内 可以调用成员
 */
fun readFromFileWith(){
    val br = BufferedReader(FileReader("text.txt"))
    with(br){
        var line: String?
        while (true){
            line = readLine()?: break
            println(line)
        }
        close()
    }
}

fun easyRead(){
    val content = BufferedReader(FileReader("text.txt")).readText()
    println(content)
}